import redis
import pandas as pd
from datetime import timedelta
from . import config

def load_all_net_flows_from_redis():
    """
    从 Redis 加载所有社区在所有时间槽的净流量数据。
    对于 Redis 中不存在的记录（即空闲时间槽），净流量记为 0。
    返回一个包含完整时序数据的 Pandas DataFrame。
    """
    print("开始从 Redis 加载数据...")
    try:
        r = redis.Redis(
            host=config.REDIS_HOST, 
            port=config.REDIS_PORT, 
            db=config.DB_NUM, 
            decode_responses=True
        )
        r.ping()
    except Exception as e:
        print(f"❌ Redis 连接失败: {e}")
        return None

    all_data = []
    
    # 遍历所有社区和所有时间槽，构建一个完整的数据集
    for community_id in range(1, config.NUM_COMMUNITIES + 1):
        current_slot = config.SIMULATION_START_DATE
        while current_slot < config.SIMULATION_END_DATE:
            slot_str = current_slot.isoformat()
            redis_key = f"community:{community_id}:netflow"
            
            # 从 Redis 获取数据，如果不存在则为 0
            net_flow_str = r.hget(redis_key, slot_str)
            net_flow = int(net_flow_str) if net_flow_str is not None else 0
            
            all_data.append([community_id, current_slot, net_flow])
            
            current_slot += timedelta(minutes=30)
            
    print(f"数据加载完成，共 {len(all_data)} 条记录。")
    
    # 转换为 Pandas DataFrame
    df = pd.DataFrame(all_data, columns=['community_id', 'timestamp', 'net_flow'])
    return df